package com.headingdata.d9_interface_attention;

public class Test2 {

    public static void main(String[] args) {
        //目标：了解接口的注意事项
        // 方法签名：方法签名由方法名和参数列表组成，不包括返回类型和修饰符等
//        - 一个接口继承多个接口，如果多个接口中存在方法签名冲突，则此时不支持多继承
//                - 一个类实现多个接口，如果多个接口中存在方法签名冲突，则此时不支持多实现
//                - 一个类继承了父类，又同时实现了接口，父类中的接口中又同名的默认方法，实现类会优先用父类的
//                - 一个类实现了多个接口，多个接口中存在同名默认方法，可以不冲突，这个类重写该方法即可

        Z z =new Z();
        z.run();
    }
}


//一个接口继承多个接口，如果多个接口中存在方法签名冲突，则此时不支持多继承
interface I {
    void test1();
//    default void run(){
//        System.out.println("===执行了默认方法===");
//    };
}
interface J{
    String test1();
}

//interface K extends I,J{
//
//}


//一个类实现多个接口，如果多个接口中存在方法签名冲突，则此时不支持多实现
//class  L implements I,J{
//
//    @Override
//    public void test1() {
//
//    }
//}

// 一个类继承了父类，又同时实现了接口，父类中的接口中又同名的默认方法，实现类会优先用父类的

class F{
    public void run(){
        System.out.println("===执行了父类方法===");
    }
}
interface  IT{
    default void run(){
        System.out.println("===执行了默认方法===");
    }
}
class Z extends F implements IT{



}

//- 一个类实现了多个接口，多个接口中存在同名默认方法，可以不冲突，这个类重写该方法即可

interface AA {
    default void test1(){
        System.out.println("===AA默认方法===");
    };
}

interface BB {
    default void test1(){
        System.out.println("===BB默认方法===");
    };
}

class CC implements  AA,BB{

    @Override
    public void test1() {
        AA.super.test1();
    }
}
